// coding: utf-8
// @Author : lryself
// @Date : 2020/10/16 21:56
// @Software: GoLand

// 题目：给定一个按非递减顺序排序的整数数组 A，返回每个数字的平方组成的新数组，要求也按非递减顺序排序。
// 题目url：https://leetcode-cn.com/problems/squares-of-a-sorted-array/
// 作者题解：https://leetcode-cn.com/problems/squares-of-a-sorted-array/solution/shuang-zhi-zhen-xiang-xiang-er-xing-sheng-cheng-ji/

package main

import (
	"fmt"
	"go_learning/src/utils"
)

func main() {
	e1 := sortedSquares
	utils.DecoratorExample(&e1,sortedSquares)
	fmt.Println(e1([]int{-4,-1,0,3,10}))
}

func sortedSquares(A []int) []int {
	n:=len(A)
	B := make([]int, n)
	i:=0
	j:=n-1
	index:=n-1
	for index>0{
		temp := compare(A[i],A[j])
		if temp == 0{
			B[index]=A[i]*A[i]
			index--
			i++
			B[index]=A[j]*A[j]
			index--
			j--
		}else if temp == 1{
			B[index]=A[i]*A[i]
			index--
			i++
		}else {
			B[index]=A[j]*A[j]
			index--
			j--
		}
	}
	if index==0{
		B[index]=A[j]*A[j]
	}
	return B
}
func compare(x int,y int)int{
	if x<0{
		x=-x
	}
	if y<0{
		y=-y
	}
	if x>y{
		return 1
	}else if x<y{
		return 2
	}else {
		return 0
	}
}
